C++11中auto的使用 您所在的位置:网站首页 auto my C++11中auto的使用

C++11中auto的使用

#C++11中auto的使用| 来源: 网络整理| 查看: 265

在C语言中,就有了auto关键字,它被当作是一个变量的存储类型修饰符,表示自动变量(局部变量)。它不能被单独使用,否则编译器会给出警告。在C++11标准中,添加了新的类型推导特性。在C ++11中,使用auto定义的变量不能使用其它类型修饰符修饰,该变量的类型由编译器根据初始化数据自动确定。

C++中类型检查是在编译阶段。动态类型语言能做到在运行时决定类型,主要归功于一技术,这技术是类型推导。在C++11中,可以通过重定义auto关键字来实现类型推导。

         在C++11中,使用auto关键字可以要求编译器对变量的类型进行自动推导。

         auto关键字:类型推导,从该关键字的初始化表达式中推导变量的类型。

         在块作用域、命名空间作用域、for循环的初始化语句内声明变量的时候,变量的类型可以被省略,使用关键字auto来代替。

         auto声明的变量必须被初始化,以使编译器能够从其初始化表达式中推导出其类型。

         声明为auto的变量在编译时期就分配了内存,而不是到了运行时期,所以使用auto不再引发任何速度延迟,这也意味着使用auto的时候,这个变量不初始化会报错,因为编译器无法知道这个变量的类型。

         auto使用时需注意:

         (1)、可以使用const、volatile、pointer(*)、reference(&)、rvalue reference(&&)等说明符和声明符来修饰auto关键字;

         (2)、用auto声明的变量必须初始化;

         (3)、auto不能与其它任何类型说明符一起使用;

         (4)、方法、参数或模板参数不能被声明为auto;

         (5)、定义在堆上的变量,使用了auto的表达式必须被初始化;

         (6)、auto是一个占位符,不是类型,不能用于类型转换或其它一些操作,如sizeof、typeid;

         (7)、auto关键字内声明的声明符列表的所有符号必须解析为同一类型;

         (8)、auto不能自动推导成CV-qualifiers(constant& volatile qualifiers),除非被声明为引用类型;     

         (9)、auto会退化成指向数组的指针,除非被声明为引用;

         (10)、auto不能作为函数的返回类型,在C++14中是可以的。

         建议:大多数情况使用关键字auto,除非非常需要转换。

下面是从其他文章中copy的测试代码,详细内容介绍可以参考对应的reference:

#include "auto.hpp" #include #include #include #include #include #include #include #include // // reference: http://en.cppreference.com/w/cpp/language/auto template auto add(T t, U u) -> decltype(t + u) // the return type is the type of operator+(T, U) { return t + u; } auto get_fun(int arg) -> double(*)(double) // same as: double (*get_fun(int))(double) { switch (arg) { case 1: return std::fabs; case 2: return std::sin; default: return std::cos; } } int test_auto1() { auto a = 1 + 2; std::cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有